package com.tbit.uqbike.client.service;

import com.alibaba.fastjson.JSONObject;
import com.tbit.common.enums.FeeTypeEnum;
import com.tbit.uqbike.client.pojo.*;
import com.tbit.uqbike.client.pojo.newEntity.*;
import com.tbit.uqbike.client.pojo.vo.OutAgeConfig;
import com.tbit.uqbike.client.remote.zk.ZkPayConfig;

import java.util.List;

/**
 * @Author: chen
 * @Description: 缓存
 * @Date: 创建于 15:26 2020/8/3
 */
public interface CacheService {

    /**
     * 电子围栏
     *
     * @param accountId 区域id
     * @return
     */
    List<Geo> getGeo(Integer accountId);

    /**
     * 计费规则
     *
     * @param accountId 区域id
     * @return
     */
    AdAccountFee getAdAccountFee(Integer accountId, Integer machineId);

    /**
     * 系统配置
     *
     * @param accountId 品牌id
     * @return
     */
    AccountConfig getConfig(Integer accountId);

    /**
     * 微信支付配置
     *
     * @param accountId 品牌id
     * @param type      类型
     * @return
     */
    WeixinPayConfig getWxPay(Integer accountId, Integer type);

    /**
     * 获取区域的所有分时计费（分时/假日）
     * @param accountId 区域id
     * @return
     */
    List<TimeFee> getTimeFeeList(Integer accountId);

    /**
     * 微信支付配置
     *
     * @param accountId 品牌id
     * @param type      类型
     * @return
     */
    ZfbPayConfig getZfbPay(Integer accountId, Integer type);

    /**
     * 小程序配置
     *
     * @param accountId 品牌id
     * @return
     */
    MpBrandConfig getMpConfig(Integer accountId);

    /**
     * 短信配置
     *
     * @param accountId 品牌id
     * @return
     */
    SmsAuthConfig getSmsConfig(Integer accountId);

    Account getAccount(Integer accountId);

    /**
     * 查看借车信息
     *
     * @param userId
     * @param machineId
     * @return
     */
    RideLog getBorrowInfo(Integer userId, Integer machineId);

    /**
     * 查看车辆信息
     *
     * @param machineId
     * @param userCode
     * @return
     */
    Machine getMachineInfo(Integer machineId, String userCode, String machineNO);

    /**
     * 区域阐述配置
     *
     * @param accountId 区域id
     * @return
     */
    List<AccountConfigExt> getAccountConfigExt(Integer accountId);

    /**
     * 根据accountId和key查询配置
     *
     * @param accountId .
     * @param configKey .
     * @return 。
     */
    AccountConfigExt selectByAccountIdAndKey(Integer accountId, String configKey);

    /**
     * 品牌配置
     *
     * @param accountId
     * @param configType
     * @return
     */
    BrandRemoteConfig getBrandRemoteConfig(Integer accountId, Integer configType);

    JSONObject getBrandJsonConfig(Integer accountId, Integer configType);

    /**
     * 品牌配置值
     *
     * @param accountId
     * @param configType
     * @return
     */
    String getBrandRemoteConfigValue(Integer accountId, Integer configType);

    /**
     * 品牌配置
     *
     * @param accountId
     * @return
     */
    List<BrandRemoteConfig> getBrandConfig(Integer accountId);

    /**
     * 区域阐述配置
     *
     * @param accountId 区域id
     * @return
     */
    AccountConfigExt getAccountConfigExtByKey(Integer accountId, String key);

    /**
     * 站点功能配置信息
     *
     * @param parkPointId
     * @param type
     * @return
     */
    ParkFeature getParkFeature(Integer parkPointId, Integer type);

    /**
     * 汇通天下聚合支付
     *
     * @param accountId
     * @param pay_channel
     * @return
     */
    AdaPayConfig getAdaPayConfig(Integer accountId, String pay_channel);

    /**
     * 丢失车辆信息
     *
     * @param accountId 账户id
     * @return
     */
    List<MachineLose> getMachineLose(Integer accountId);

    /**
     * 通过品牌id获取中科配置
     *
     * @param accountId
     * @return
     */
    ZkPayConfig getZkPayConfig(Integer accountId);

    /**
     * 通过mgrId获取中科配置
     *
     * @param mgrId
     * @return
     */
    ZkPayConfig getZkPayConfigByMgrId(Long mgrId);

    /**
     * 获取品牌oss配置
     *
     * @param accountId
     * @return
     */
    OssConfig getOssConfig(Integer accountId, String bucketName);


    OssConfig getOssConfigFaceLog(Integer accountId, String bucketName);
    /**
     * 微信支付配置
     *
     * @param partner 商户id
     * @return
     */
    WeixinPayConfig getByPartnerAndAppId(String partner,String appId,Boolean isCache);

    /**
     * 支付分配置
     *
     * @param brandId
     * @return
     */
    UserRidingScoreConfig getUserRidingScoreConfig(Integer brandId);

    /**
     * 根据区域id获取品牌id
     *
     * @param accountId 区域id
     * @return
     */
    Integer getBrandId(Integer accountId);

    /**
     * 判断区域的指定配置是否为1（生效）
     * @param accountId
     * @param configKey
     * @return
     */
    Boolean configValid(Integer accountId,String configKey);

    /**
     * 获取禁行区
     * @param accountId 区域id
     * @return List<Forbidden>
     */
    List<Forbidden> getForbidden(Integer accountId);

    /**
     * 获取禁停区
     * @param accountId 区域id
     * @return List<ProhibitArea>
     */
    List<ProhibitArea> getByArea(Integer accountId);


    /**
     * 获取停运配置
     * @param brandId 品牌id
     * @param accountId 区域id
     * @return OutAgeConfig
     */
    OutAgeConfig getOutAgeConfig(Integer brandId, Integer accountId);

    /**
     * 根据key名获取区域的拓展信息
     *
     * @param accountId 区域id
     * @return
     */
    List<AccountConfigExt> getAccountConfigExtByKeys(Integer accountId, List<String> keys);

    /**
     * 获取当前区域的计费模式
     * @param accountId 区域id
     * @return FeeTypeEnum
     */
    FeeTypeEnum queryFeeType(Integer accountId);

    /**
     * 获取车辆功能配置
     * @param machineId 车辆id
     * @return List<MachineFunction>
     */
    List<MachineFunction> getMachineFunction(Integer machineId);
}
